#include "constantes.h"
#include "editeur.h"

void poserObjet(SDL_Rect pcurseur, int map[WTILES][HTILES], const int typeObjet, int *ptrmarioOk, SDL_Rect *ptrpmario)
{
    int i=0,j=0,k=0,l=0;

    i=(pcurseur.x+(TILE_SIZE/2))/TILE_SIZE; // Petit calcul qui donne l'indice i avec la position de l'objet
    j=(pcurseur.y+(TILE_SIZE/2))/TILE_SIZE;

    if(map[i][j] == 4)
        *ptrmarioOk = 0;
    map[i][j]=typeObjet; // On affecte

    if(typeObjet == 4) // Cas particulier pour Mario
    {
        if(*ptrmarioOk == 1) // Si il était déjà présent
        {
            k=ptrpmario->x / TILE_SIZE;
            l=ptrpmario->y / TILE_SIZE;
            map[k][l]=0; // On efface sa position antérieure
        }
    }
}

void enleverObjet(SDL_Rect pcurseur, int map[WTILES][HTILES], int *ptrmarioOk)
{
    int i=0,j=0;

    i=(pcurseur.x+(TILE_SIZE/2))/TILE_SIZE;
    j=(pcurseur.y+(TILE_SIZE/2))/TILE_SIZE;

    if(map[i][j] == 4)
        *ptrmarioOk=0; // Le cas particulier de Mario, qu'il faut suivre

    map[i][j]=0;
}

void sauvegarderNiveau(int map[WTILES][HTILES], SDL_Surface *ecran)
{
    FILE *fichier=NULL;
    int i=0,j=0, nCaisses=0, nObj=0, nMario=0, suite=1;

    fichier=fopen("Levels/custom.lvl","w+");

    for(i=0;i<WTILES;i++)
    {
        for(j=0;j<HTILES;j++)
        {
            switch(map[j][i])
            {
                case 0:
                    fputc('0',fichier);
                    break;
                case 1:
                    fputc('1',fichier);
                    break;
                case 2:
                    fputc('2',fichier);
                    nCaisses++;
                    break;
                case 3:
                    fputc('3',fichier);
                    nObj++;
                    break;
                case 4:
                    fputc('4',fichier);
                    nMario++;
                    break;
                case 5:                 //Pas la peine de compter les caisses et objectifs ici, ils s'ajoutent ensemble.
                    fputc('5',fichier);
                    break;
            }
        }
    }
    fclose(fichier);

    if(nObj != nCaisses) // Boucle qui affiche le message d'erreur
    {
        SDL_Event event;
        SDL_Rect perreur;
        SDL_Surface *erreur=NULL;

        erreur=IMG_Load("GFX/erreur1.png");
        perreur.x=124;
        perreur.y=133;
        while(suite)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    suite=0;
                    break;
                case SDL_KEYDOWN:
                    if(event.key.keysym.sym == SDLK_SPACE)
                        suite=0;
                    break;
            }
            SDL_BlitSurface(erreur,NULL,ecran,&perreur);
            SDL_Flip(ecran);
        }
        SDL_FreeSurface(erreur);
    }
    else if(nMario < 1) // Erreur si il n'y a pas de Mario sur la carte
    {
        SDL_Event event;
        SDL_Rect perreur;
        SDL_Surface *erreur=NULL;

        erreur=IMG_Load("GFX/erreur2.png");
        perreur.x=124;
        perreur.y=133;
        while(suite)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    suite=0;
                    break;
                case SDL_KEYDOWN:
                    if(event.key.keysym.sym == SDLK_SPACE)
                        suite=0;
                    break;
            }
            SDL_BlitSurface(erreur,NULL,ecran,&perreur);
            SDL_Flip(ecran);
        }
        SDL_FreeSurface(erreur);
    }
}

void recupererNiveau(int map[WTILES][HTILES]) // On lit le niveau dans custom
{
    FILE *fichier=NULL;
    char niveau[WTILES*HTILES+1]={0};
    int i=0,j=0;

    fichier=fopen("Levels/custom.lvl","r");
    if (fichier != NULL)
    {
        fgets(niveau,WTILES*HTILES+1,fichier);

        for(i=0;i<WTILES;i++)
        {
            for(j=0;j<HTILES;j++)
            {
                switch(niveau[j+i*WTILES])
                {
                    case '0':
                        map[j][i]=0;
                        break;
                    case '1':
                        map[j][i]=1;
                        break;
                    case '2':
                        map[j][i]=2;
                        break;
                    case '3':
                        map[j][i]=3;
                        break;
                    case '4':
                        map[j][i]=4;
                        break;
                    case '5':
                        map[j][i]=5;
                        break;
                }
            }
        }
    fclose(fichier);
    }
}
